package com.dc.ftp.test.Fragment;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.Toast;

/**
 * 1).它是什么鬼，有什么用？
 * 使用Fragment,你可以把他看成一个小型的Activity,又称Activity片段,我们需要一个小布局，我们不可能为他写一个界面，如果组件多的话
 * 管理起来很麻烦！使用Fragment我们可以把屏幕划分成几块，然后进行分组进行模块化的管理。可以更加方便的动态更新Activity的用户界面
 * Fragment不能单独使用，需要嵌套Activity中使用,Fragment自己的生命周期，会受到宿主Activity的生命周期的影响
 * 比如Activity 被destory销毁了，他也会跟着销毁！
 * 2).核心要点：
 * 1.Fragment需要嵌套在Activity中使用,当然也可以嵌套到另外一个Fragment中,但这个被嵌套 的Fragment也是需要嵌套在Activity中的,间接地说,Fragment还是需要嵌套在Activity中!! 受寄主Activity的生命周期影响,当然他也有自己的生命周期!另外不建议在Fragment里面 嵌套Fragment因为嵌套在里面的Fragment生命周期不可控!!!
 * 2.创建Fragment时至少需要实现三个方法:onCreate( ),onCreateView( ),OnPause( ); 不过貌似只写一个onCreateView也是可以的...
 * 3.Fragment的生命周期和Activity有点类似:三种状态:
     Resumed:在允许中的Fragment可见
     Paused:所在Activity可见,但是得不到焦点
     Stoped: ①调用addToBackStack(),Fragment被添加到Bcak栈 ②该Activity转向后台,或者该Fragment被替换/删除
     ps:停止状态的fragment仍然活着(所有状态和成员信息被系统保持着),然而,它对用户 不再可见,并且如果activity被干掉,他也会被干掉.
 *
 */
public class TextFragment extends Fragment {

    /**
     * 当该Fragment被添加到Activity中会回调,只会被调用一次
     * @param context
     */
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        Toast.makeText(context,"----Fragment被添加到Activity中会回调onAttach",Toast.LENGTH_LONG).show();
    }

    /**
     * 创建Fragment时回调,只会被调用一次
     * @param savedInstanceState
     */
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Toast.makeText(getActivity(),"----创建Fragment时回调,只会被调用一次onCreate",Toast.LENGTH_LONG).show();
    }

    /**
     * 每次创建,绘制该Fragment的View组件时回调,会将显示的View返回
     * @param inflater
     * @param container
     * @param savedInstanceState
     * @return
     */
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        Toast.makeText(getActivity(),"----绘制该Fragment的onCreateView进行View组件时回调",Toast.LENGTH_LONG).show();
        //定义一个EditText对象并将其初始化
        //因为getActivity()大部分都是在fragment中使用到，而fragment需要依赖于activity，
        // 所有我们在fragment里头需要做一些动作，比如启动一个activity，就需要拿到activity对象才可以启动，
        // 而fragment对象是没有startActivity()方法的。
        EditText et = new EditText(getActivity());
        et.setHint("动态加载的text");
        return et;
    }

    /**
     * 启动Fragment时被回调
     */
    @Override
    public void onStart() {
        super.onStart();
        Toast.makeText(getActivity(),"----启动Fragment时被回调onStart",Toast.LENGTH_LONG).show();
    }

    /**
     * 当Fragment所在的Activity启动完成后回调
     * @param savedInstanceState
     */
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Toast.makeText(getActivity(),"----Activity启动完成后回调onActivityCreated",Toast.LENGTH_LONG).show();
    }

    /**
     * 恢复Fragment时被回调,onStart()方法后一定回调onResume()方法
     * onStart可见,onResume后才能交互
     */
    @Override
    public void onResume() {
        super.onResume();
        Toast.makeText(getActivity(),"----恢复Fragment时被回调onResume",Toast.LENGTH_LONG).show();
    }

    /**
     * 暂停Fragment时被回调
     */
    @Override
    public void onPause() {
        super.onPause();
        Toast.makeText(getActivity(),"----暂停Fragment时回调onPause",Toast.LENGTH_LONG).show();
    }

    /**
     * 停止Fragment时被回调
     */
    @Override
    public void onStop() {
        super.onStop();
        Toast.makeText(getActivity(),"----停止Fragment时被回调onStop",Toast.LENGTH_LONG).show();
    }

    /**
     * 销毁该Fragment所包含的View组件时使用
     */
    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Toast.makeText(getActivity(),"----销毁该Fragment所包含的View组件时使用onDestroyView",Toast.LENGTH_LONG).show();
    }

    /**
     * 销毁Fragment时被毁掉
     */
    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(getActivity(),"----销毁Fragment时回调onDestroy",Toast.LENGTH_LONG).show();
    }

    /**
     * 将该Fragment从Activity被删除/替换 完成后回调该方法;onDestroy()方法后
     * 一定会回调该方法。该方法只调用一次
     */
    @Override
    public void onDetach() {
        super.onDetach();
        Toast.makeText(getActivity(),"----Fragment从Activity被删除/替换 完成后回调该方法onDetach",Toast.LENGTH_LONG).show();
    }
}

